package cn.kust.clock.controller;

import cn.kust.clock.pojo.dto.CommentDTO;
import cn.kust.clock.pojo.vo.CommentVO;
import cn.kust.clock.service.CommentService;
import cn.kust.microtourismcommon.pojo.dto.ResponseResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author YL
 * @data 2022/7/22 16:04
 **/
@Slf4j

@RestController
@RequestMapping("/api-clock/comment")
public class CommentController {


    @Autowired
    CommentService commentService;

    /**
     * 根据类型与类型id查询对应的所有一级评论，按时间降序排序
     * @param type 游记或打卡类型
     * @param typeId 游记或打卡id
     * @return 一级评论列表 评论id 包括用户id 用户名 头像 评论内容 创建时间
     */
    @GetMapping("level-one/{type}/{typeId}")
    public ResponseResult selectCommentOfLevelOne(@PathVariable("type") Integer type, @PathVariable("typeId") Long typeId) {
        log.info("进入获取一级评论的Controller层");
        if (type != 1 && type != 2) {
            return ResponseResult.fail(10086,"type类型错误");
        }
        List<CommentVO> commentVOList = commentService.selectCommentOfLevelOne(type, typeId);

        log.info("commentVOList:{}",commentVOList);
        if (commentVOList == null) {
            return ResponseResult.fail(10086,"结果为null");
        }else {
            return ResponseResult.success(commentVOList);
        }

    }



    /**
     * 根据传入的评论id与父id字段比较，找出该评论的所有子评论，按时间降序排序
     * @param id 主键id--评论的id
     * @return 该id的子集评论列表 评论id 包括用户id 用户名 头像 评论内容 创建时间
     */
    @GetMapping("/level-mul/{id}")
    public ResponseResult selectCommentByCommentId(@PathVariable("id") Long id) {
        log.info("进入获取多级评论的Controller层");
        List<CommentVO> commentVOList = commentService.selectCommentByCommentId(id);

        log.info("commentVOList:{}",commentVOList);
        if (commentVOList == null) {
            return ResponseResult.fail(10086,"结果为null");
        }else {
            return ResponseResult.success(commentVOList);
        }
    }

    /**
     * 插入新评论
     * @param commentDTO 前端传来的相关新评论数据对象
     * @return 受影响行数
     */
    @PostMapping("/insert")
    public ResponseResult insert(@RequestBody CommentDTO commentDTO) {
        log.info("进入插入评论的Service层");
        if (commentDTO.getContent().length() == 0) {
            return ResponseResult.fail(10086,"评论内容为空！");
        }
        if (commentDTO.getTopId() == null) {
            return ResponseResult.fail(10086,"topId为空！");
        }
        if (commentDTO.getUserId() == null) {
            return ResponseResult.fail(10086,"userId为空！");
        }
        if (commentDTO.getType() == null) {
            return ResponseResult.fail(10086,"type为空！");
        }
        if (commentDTO.getType() != 1 && commentDTO.getType() != 2) {
            return ResponseResult.fail(10086,"类型不正确！");
        }
        if (commentDTO.getTypeId() == null) {
            return ResponseResult.fail(10086,"typeId为空！");
        }
        int count = commentService.insert(commentDTO);

        if (count == 1) {
            return ResponseResult.success("插入成功");
        }

        return ResponseResult.fail(10086, "插入失败");
    }

    /**
     * 根据id删除对应评论
     * @param id 评论id
     * @return 受影响行数
     */
    @GetMapping("/delete/{id}")
    public ResponseResult delete(@PathVariable("id") Long id) {
        log.info("进入删除评论的Controller层");
        int count = commentService.delete(id);
        if (count == 1) {
            return ResponseResult.success("删除成功");
        }
        return ResponseResult.fail(10086, "删除失败");
    }



}
